package com.hxgz.util;

import com.alibaba.druid.util.StringUtils;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;


@Slf4j
public class CookieUtil {

  private final static String COOKIE_DOMAIN = PropertiesUtil.getProperty("cookie.domain");
  private final static String COOKIE_NAME = "geo_login_token";
  private final static String BACK_COOKIE_NAME = "geo_back_login_token";

  public static String readLoginToken(HttpServletRequest request) {
    Cookie[] cks = request.getCookies();
    if (cks != null) {
      for (Cookie ck : cks) {
        log.info("read cookieName:{},cookieValue:{}", ck.getName(), ck.getValue());
        if (StringUtils.equals(ck.getName(), COOKIE_NAME)) {
          log.info("return cookieName:{},cookieValue:{}", ck.getName(), ck.getValue());
          return ck.getValue();

        }
      }
    }
    return null;
  }

  public static String readBackLoginToken(HttpServletRequest request) {
    Cookie[] cks = request.getCookies();
    if (cks != null) {
      for (Cookie ck : cks) {
        log.info("read cookieName:{},cookieValue:{}", ck.getName(), ck.getValue());
        if (StringUtils.equals(ck.getName(), BACK_COOKIE_NAME)) {
          log.info("return cookieName:{},cookieValue:{}", ck.getName(), ck.getValue());
          return ck.getValue();

        }
      }
    }
    return null;
  }


  public static void writeLoginToken(HttpServletResponse response, String token) {
    Cookie ck = new Cookie(COOKIE_NAME, token);
    ck.setDomain(COOKIE_DOMAIN);
    ck.setPath("/");//代表设置在根目录
    ck.setHttpOnly(true);
    //单位是秒。
    //如果这个maxage不设置的话，cookie就不会写入硬盘，而是写在内存。只在当前页面有效。
    ck.setMaxAge(60 * 60 * 24 * 365);//如果是-1，代表永久
    log.info("write cookieName:{},cookieValue:{}", ck.getName(), ck.getValue());
    response.addCookie(ck);
  }

  public static void writeBackLoginToken(HttpServletResponse response, String token) {
    Cookie ck = new Cookie(BACK_COOKIE_NAME, token);
    ck.setDomain(COOKIE_DOMAIN);
    ck.setPath("/");//代表设置在根目录
    ck.setHttpOnly(true);
    //单位是秒。
    //如果这个maxage不设置的话，cookie就不会写入硬盘，而是写在内存。只在当前页面有效。
    ck.setMaxAge(60 * 60 * 24 * 365);//如果是-1，代表永久
    log.info("write cookieName:{},cookieValue:{}", ck.getName(), ck.getValue());
    response.addCookie(ck);
  }


  public static void delLoginToken(HttpServletRequest request, HttpServletResponse response) {
    Cookie[] cks = request.getCookies();
    if (cks != null) {
      for (Cookie ck : cks) {
        if (StringUtils.equals(ck.getName(), COOKIE_NAME)) {
          ck.setDomain(COOKIE_DOMAIN);
          ck.setPath("/");
          ck.setMaxAge(0);//设置成0，代表删除此cookie。
          log.info("del cookieName:{},cookieValue:{}", ck.getName(), ck.getValue());
          response.addCookie(ck);
          return;
        }
      }
    }
  }


}
